﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace HOOMT
{
    class PrimitiveStateDiagram: StateDiagram
    {
        #region 构造函数
        public PrimitiveStateDiagram(Point point, int width = 140, int height = 80)
            :base(point, width, height)
        {
            name = "PrimitiveStateDiagram";
        }
        #endregion
        //***********************************************************************************
        public override void Drawing(Graphics g, OriginalModelForm m)
        {
            //绘制对象
            Pen pen = new Pen(Color.Brown, 1);
            Rectangle rect = new Rectangle(upLeftpoint.X, upLeftpoint.Y, width, height);
            //g.DrawRectangle(pen, rect);
            DrawRoundRectangle(g, pen, rect, 10);
            //显示文字
            base.Drawing(g, m);
        }
        //***********************************************************************************
        #region 画圆角矩形
        private void DrawRoundRectangle(Graphics g, Pen pen, Rectangle rect, int cornerRadius)
        {
            using (GraphicsPath Path = CreateRoundedRectanglePath(rect, cornerRadius))
            {
                g.DrawPath(pen, Path);
            }
        }
        //***********************************************************************************
        /*private void FillRoundRectangle(Graphics g, Brush brush, Rectangle rect, int cornerRadius)
        {
            using (GraphicsPath preTreeNode = CreateRoundedRectanglePath(rect, cornerRadius))
            {
                g.FillPath(brush, preTreeNode);
            }
        }*/
        //***********************************************************************************
        private GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
        {
            GraphicsPath roundedRect = new GraphicsPath();
            roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
            roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
            roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
            roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
            roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
            roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
            roundedRect.CloseFigure();
            return roundedRect;
        }
        #endregion
    }
}
